//
//  ChatManager.h
//  DogeLegs
//
//  Created by 宋华 on 2017/8/26.
//  Copyright © 2017年 宋华. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "ChatMessage.h"
#import "DBHelper.h"
#import "ChatConfig.h"
#import "RecentChat.h"
#import "RecentChatManager.h"

@interface ChatManager : NSObject

#pragma mark - public 
/**
 *  @brief 发送消息前先保存聊天信息
 *  @param contentType 消息类型
 *  @param msgContent  消息内容
 *  @param contentPath 内容路径
 *  @param voiceLength 文件长度
 *  @param rChat  最近聊天记录
 *  @return 聊天消息
 */
- (ChatMessage *)saveChatMessage:(ChatMsgBodyType)contentType
                      msgContent:(NSString *)msgContent
                     contentPath:(NSString *)contentPath
                     voiceLength:(NSString *)voiceLength
                      recentChat:(RecentChat *)rChat;

+ (ChatManager*)sharedInstance;

/**
 @brief  查询客户总的消息条数
 @return 消息条数
 */
- (int)selectTotalChatMsgCountByFriendid:(NSString *)friendid;

#pragma mark - -------聊天记录表操作相关--------

/**
 @brief 插入多条消息数据到聊天界面
 @param listData 多条消息数据
 */
- (void)insertChatMsgWithList:(NSArray *)listData;

/**
 @brief 创建聊天记录表并插入数据
 @param msg    会话消息
 */
- (BOOL)createChatTable:(ChatMessage *)msg;

/**
 @brief  将消息插入消息记录表
 @param  msg 消息
 @return 查询到最近聊天消息
 */
- (RecentChat *)insertDataToChatMsgTable:(ChatMessage *)msg;

/**
 @brief  更新最近聊天消息
 @param  msg 消息
 @return 最近聊天消息
 */
- (RecentChat *)updateOrInsertDataToRecentAtQueue:(ChatMessage *)msg;

/**
 @brief  队列中将聊天记录插入到本地数据库
 @param  chatMsg 消息
 @return 消息
 */
- (ChatMessage *)insertChatMsgToChatTableAtQueue:(ChatMessage *)chatMsg;

/**
 @brief  将聊天记录插入到本地数据库
 @param  chatMsg 消息
 @return 消息
 */
- (ChatMessage *)insertChatMsgToChatTable:(ChatMessage *)chatMsg;

/**
 @brief 通过数据库Id更新单条消息
 @param dbId 消息唯一标识符
 @param  storeId  导购ID
 @param msg 消息
 */
- (BOOL)updateChatTableBy:(NSString *)dbId storeId:(NSString *)storeId message:(ChatMessage *)msg;


/**
 @brief 通过dbId获取单条数据
 @param dbId 消息唯一标识符
 @param  storeId  导购ID
 @param msg 消息
 */
- (ChatMessage *)selectChatMsgDataBy:(ChatMessage *)msg dbId:(NSString *)dbId storeId:(NSString *)storeId;

/**
 @brief 获取某条消息之前指定数量的消息
 @param  storeId  导购ID
 @param count 数量
 */
- (NSArray *)selectDataFromTableBy:(NSString *)storeId currentCount:(NSInteger)count;

/**
 @brief 通过dbId更新消息收发状态
 @param dbId 消息唯一标识符
 @param  storeId  导购ID
 @param state 消息的状态
 */
- (BOOL)updateChatTableBy:(NSString *)dbId storeId:(NSString *)storeId messageState:(ChatMsgState)state;

/**
 @brief 通过storeId更新接收到的语音消息的已读未读
 @param  storeId  导购ID
 */
- (void)updateUnreadMessageToReadedWithStoreId:(NSString *)storeId;

/**
 @brief 通过dbId和更新时间更新消息收发状态
 @param dbId 消息唯一标识符
 @param time 更新时间
 @param state 消息的状态
 */
- (void)updateChatTableBy:(NSString *)dbId withTime:(NSString *)time messageState:(ChatMsgState)state;

/**
 @brief 通过dbId和storeId更新消息时间分割线
 @param dbId 消息唯一标识符
 @param  storeId  导购ID
 @param splitTime 消息的状态
 */
- (BOOL)updateChatTableByDBID:(NSString *)dbId storeId:(NSString *)storeId withSplitTime:(NSString *)splitTime;

/**
 @brief  通过dbId和storeId更新消息阅读状态
 @param  dbId 消息唯一标识符
 @param  storeId  导购ID
 @param  isVoiceReaded 消息是否阅读
 @return 更新操作是否成功
 */
- (BOOL)updateChatTableBy:(NSString *)dbId storeId:(NSString *)storeId isVoiceReaded:(BOOL)isVoiceReaded;

/**
 @brief  通过storeId查询对应聊天的全部图片
 @param  storeId  导购ID
 @param  mType 消息类型
 @return 图片数组
 */
- (NSArray *)selectImageArray:(NSString *)storeId messageBodyType:(ChatMsgBodyType)mType;


/**
 @brief  根据storeId生成聊天表名
 @param  storeId  导购ID
 @return 用户聊天表名称
 */
- (NSString *)chatTableName:(NSString *)storeId;


/**
 @brief 根据storeId删除某个客户的聊天记录
 @param  storeId  导购ID
 */
- (void)deleteChatTable:(NSString *)storeId;



@end
